﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Common;
using BusinessLayer;

namespace BoletoElectronicoDesktop.AbmUsuario
{

    public partial class FormUsuarioList : FormListDelete
    {

        public FormUsuarioList(Common.Util.Funcionalidad Use)
            : base(Use)
        {
            InitializeComponent();
            InitializeData();
        }

        private void InitializeData()
        {
            btnSearch_Click();
            FillRoles();
        }

        private void FillRoles()
        {
            dsBoleto ds = BizRol.retrieveRoles();
            chkRoles.DataSource = ds.Rol;
            chkRoles.DisplayMember = "Descripcion";
            chkRoles.ValueMember = "IdRol";
        }

        private int selectedId;
        public int SelectedId
        {
            get
            {
                try
                {
                    if ((dsBoleto.UsuarioRow)((DataRowView)(dgwUsuario.CurrentRow.DataBoundItem)).Row != null)
                    {
                        selectedId = ((dsBoleto.UsuarioRow)((DataRowView)(dgwUsuario.CurrentRow.DataBoundItem)).Row).IdUsuario;
                    }
                }
                catch (Exception)
                {
                    selectedId = 0;
                }
                return selectedId;
            }
            set
            { selectedId = value; }
        }

        private void dgwUsuario_SelectionChanged(object sender, EventArgs e)
        {
            OnDGWSelectedItem();
        }

        private void OnDGWSelectedItem()
        {
            dsBoleto.UsuarioRow ur = (dsBoleto.UsuarioRow)((DataRowView)(dgwUsuario.CurrentRow.DataBoundItem)).Row;
            switch (dgwUsuario.CurrentCell.ColumnIndex)
            {
                case 1://Edit
                    btnEdit_Click();
                    break;
                case 2://Delete
                    if (UserAllowed(Util.Funcionalidad.UsuarioBaja))
                    {


                        if (MessageBox.Show("Esta seguro que desea eliminar el usuario especificado?",
                            "Eliminar usuario", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {

                            btnEliminar_Click();
                        }
                    }
                    else
                    {
                        MessageBox.Show("Ud. No tiene permisos como para realizar esta operacion.-");
                    }
                    break;

                default:
                    break;
            }
        }

        private void OnDGWDeselectedItem()
        {
            SelectedId = 0;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {

            try
            {
                FormAbmUsuario frm;
                if (this.MdiParent.MdiChildren.Any(f => f is FormAbmUsuario))
                {
                    frm = (FormAbmUsuario)this.MdiParent.MdiChildren.First(f => f is FormAbmUsuario);
                }
                else
                {
                    frm = new FormAbmUsuario(0, Util.Funcionalidad.UsuarioAlta);
                    frm.MdiParent = this.MdiParent;
                }

                frm.Show();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            btnEdit_Click();

        }

        private void btnEdit_Click()
        {
            try
            {
                FormAbmUsuario frm;
                if (this.MdiParent.MdiChildren.Any(f => f is FormAbmUsuario))
                {
                    frm = (FormAbmUsuario)this.MdiChildren.First(f => f is FormAbmUsuario);
                }
                else
                {
                    frm = new FormAbmUsuario(SelectedId, Util.Funcionalidad.UsuarioModificacion);
                    frm.MdiParent = this.MdiParent;
                }

                frm.Show();
            }
            catch (ApplicationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnSearch_Click(object sender, EventArgs e)
        {
            btnSearch_Click();
        }

        public void Search()
        {
            btnSearch_Click();
        }

        private void btnSearch_Click()
        {
            OnDGWDeselectedItem();
            bool SoloHabilitados = rdDeletedNo.Checked;
            string UsrName = txtName.Text;

            if (rdRol.Checked)
            {
                List<int> Roles = Util.CheckedListBoxToListInt(chkRoles, "IdRol");
                dgwUsuario.DataSource = BizUser.LoadUsers(UsrName, Roles, SoloHabilitados).Usuario;
            }
            else
            {
                dgwUsuario.DataSource = BizUser.LoadUsers(UsrName, SoloHabilitados).Usuario;
            }
        }

        private void dgwUsuario_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
                OnDGWSelectedItem();
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            btnEliminar_Click();
        }

        private void btnEliminar_Click()
        {
            BizUser.DeleteUser(SelectedId);
        }

    }
}
